home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / crt / symm.md / RCS / modf.c,v < prev   
Text File  |  1990-09-26  |  2KB  |  83 lines

  1. head     1.2;
  2. branch   ;
  3. access   ;
  4. symbols  ;
  5. locks    ; strict;
  6. comment  @ * @;
  7.  
  8.  
  9. 1.2
  10. date     90.09.26.12.54.46;  author kupfer;  state Exp;
  11. branches ;
  12. next     1.1;
  13.  
  14. 1.1
  15. date     90.09.07.14.29.53;  author kupfer;  state Exp;
  16. branches ;
  17. next     ;
  18.  
  19.  
  20. desc
  21. @modf() math routine.
  22. @
  23.  
  24.  
  25. 1.2
  26. log
  27. @Include <math.h> to verify that we are declaring things correctly.
  28. @
  29. text
  30. @/* $Copyright:    $
  31.  * Copyright (c) 1984, 1985 Sequent Computer Systems, Inc.
  32.  * All rights reserved
  33.  *  
  34.  * This software is furnished under a license and may be used
  35.  * only in accordance with the terms of that license and with the
  36.  * inclusion of the above copyright notice.   This software may not
  37.  * be provided or otherwise made available to, or used by, any
  38.  * other person.  No title to or ownership of the software is
  39.  * hereby transferred.
  40.  */
  41.  
  42. /* $Header: /sprite/src/lib/c/crt/symm.md/RCS/modf.c,v 1.1 90/09/07 14:29:53 kupfer Exp Locker: kupfer $
  43.  *
  44.  * modf(value, iptr) returns the signed fractional part of value
  45.  * and stores the integer part indirectly through iptr.
  46.  */
  47.  
  48. #include <values.h>
  49. #include <math.h>
  50.  
  51. double
  52. modf(value, iptr)
  53. register double value;
  54. register double *iptr;
  55. {
  56.     register double absvalue;
  57.  
  58.     if ((absvalue = (value >= 0.0) ? value : -value) >= MAXPOWTWO)
  59.         *iptr = value; /* it must be an integer */
  60.     else {
  61.         *iptr = absvalue + MAXPOWTWO; /* shift fraction off right */
  62.         *iptr -= MAXPOWTWO; /* shift back without fraction */
  63.         while (*iptr > absvalue) /* above arithmetic might round */
  64.             *iptr -= 1.0; /* test again just to be sure */
  65.         if (value < 0.0)
  66.             *iptr = -*iptr;
  67.     }
  68.     return (value - *iptr); /* signed fractional part */
  69. }
  70. @
  71.  
  72.  
  73. 1.1
  74. log
  75. @Initial revision
  76. @
  77. text
  78. @d13 1
  79. a13 1
  80. /* $Header: modf.c 1.1 86/02/24 $
  81. d20 1
  82. @
  83.